Data for the construction market gathered from Eurostat and macro indicators gathered from OECD
Unfortunately not all countries report the subitems Buildings and Civil engineering works, but only Construction. Furthermore, not all countries report building permits.
The EU countries belowe are the ones that do provide the subitems.
We want to forecast the buildings sector for the coming two years (2022 and 2023), with building permits along with macro indicators as covariates. Forecasts for the macro indicators are provided by OECD. We do not have forecasts for building permits, but permits by definition has (depending on the project) a lagging effect. Since we want to forecast two years forward, we are restricted to use permits with 2 years lag at the least.
C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name) C:\Users\lukas\anaconda3\envs\adaptive-paradigms\lib\site-packages\pandas\core\indexing.py:692: SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy iloc._setitem_with_indexer(indexer, value, self.name)
Below is the adjusted R2 score for the models
| R2_adj | |
|---|---|
| Austria | 0.6207 |
| Belgium | 0.7252 |
| Bulgaria | 0.7192 |
| Croatia | 0.3490 |
| Czechia | 0.1050 |
| Denmark | 0.7769 |
| Finland | 0.9067 |
| France | 0.7488 |
| Germany | 0.4943 |
| Greece | 0.7376 |
| Hungary | 0.5529 |
| Ireland | 0.5557 |
| Latvia | 0.7654 |
| Lithuania | 0.8424 |
| Montenegro | 0.1808 |
| North Macedonia | 0.0023 |
| Norway | 0.8281 |
| Poland | 0.5173 |
| Portugal | 0.7712 |
| Slovenia | 0.8548 |
| Spain | 0.5120 |
| Sweden | 0.6810 |
Below is a visualization of the forecasts, together with historic data for the construction market.
What we look for is countries with a "high" R2 score, low forecasted buildings growth and where the civil enngineering works has not seen a high growth the past years.
Countries that checks all three boxes:
Countries which has seen high growth in civil engineering works:
Countries with moderate forecasted growth for buildings:
The table below shows the covariates along with the values for the coefficients.
| Building permits - m2 of useful floor area (2) | Building permits - m2 of useful floor area (3) | Gross domestic product, volume in USD, at constant 2015 purchasing power parities | Gross domestic product, volume in USD, at constant 2015 purchasing power parities (1) | Gross domestic product, volume in USD, at constant 2015 purchasing power parities (2) | Gross domestic product, volume in USD, at constant 2015 purchasing power parities (3) | Long-term interest rate on government bonds | Short-term interest rate | Total population | const | |
|---|---|---|---|---|---|---|---|---|---|---|
| Austria | NaN | -0.109271 | 1.064441 | 0.668634 | 1.274590 | NaN | -3.177469 | NaN | NaN | NaN |
| Belgium | NaN | -0.049462 | 0.521259 | NaN | NaN | -0.234946 | -2.148777 | -0.649711 | NaN | NaN |
| Bulgaria | 0.201724 | NaN | 4.084980 | NaN | NaN | NaN | NaN | NaN | 14.001343 | NaN |
| Croatia | 0.434940 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| Czechia | 0.121640 | 0.141464 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| Denmark | NaN | NaN | 0.891715 | 0.696265 | NaN | NaN | NaN | -2.261832 | NaN | NaN |
| Finland | NaN | NaN | 1.924427 | -0.559032 | -0.305779 | NaN | NaN | NaN | 6.628063 | NaN |
| France | NaN | NaN | 1.220885 | NaN | 0.529852 | 0.321177 | -2.243941 | NaN | NaN | -0.024100 |
| Germany | -0.191447 | 0.207156 | 0.835365 | NaN | 0.482224 | NaN | -1.478367 | NaN | NaN | NaN |
| Greece | NaN | 0.175488 | 1.063191 | 2.736886 | NaN | NaN | NaN | NaN | -31.242622 | -0.117659 |
| Hungary | 0.184843 | 0.110241 | 0.863979 | NaN | NaN | NaN | 3.695242 | NaN | NaN | NaN |
| Ireland | NaN | -0.499982 | 1.347540 | 1.366630 | NaN | 1.621431 | NaN | NaN | NaN | -0.227764 |
| Latvia | -0.278427 | NaN | 2.628296 | NaN | NaN | NaN | NaN | NaN | 11.865496 | 0.117003 |
| Lithuania | NaN | -0.304630 | 3.292872 | NaN | NaN | 0.778944 | NaN | -2.635675 | 5.242914 | NaN |
| Montenegro | 0.462904 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | 0.125316 |
| North Macedonia | 0.154722 | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN | NaN |
| Norway | NaN | 0.026412 | 1.957729 | 0.622817 | NaN | -0.776409 | NaN | -0.759201 | NaN | NaN |
| Poland | NaN | NaN | 2.943581 | NaN | 1.460671 | NaN | 8.266152 | -7.837516 | NaN | -0.123839 |
| Portugal | 0.419379 | NaN | 0.759776 | NaN | -1.730560 | -1.178327 | NaN | NaN | 10.926755 | NaN |
| Slovenia | 0.379685 | NaN | 2.889608 | NaN | 1.011475 | NaN | 4.612137 | NaN | NaN | -0.127381 |
| Spain | NaN | NaN | 1.088225 | NaN | NaN | NaN | 8.000813 | -5.124887 | NaN | -0.030263 |
| Sweden | NaN | NaN | 1.199244 | 0.605068 | NaN | NaN | NaN | NaN | NaN | NaN |
The nordics and southwestern/western Europe might be candidates.